#include <iostream>
#include <functional>

using std::cout;
using std::endl;
using std::bind;

void func(int x1, int x2, int x3, const int &x4, int x5)
{
    cout << "x1 = " << x1 << endl
         << "x2 = " << x2 << endl
         << "x3 = " << x3 << endl
         << "x4 = " << x4 << endl
         << "x5 = " << x5 << endl;
}

void test()
{
    int number = 100;
    //占位符整体代表的是形参的位置
    //占位符中的数字代表的是实参的位置
    //实参的个数一定要大于等于占位符中数字的最大值
    //bind的参数的默认传递方式是值传递(拷贝、副本)
    //如果想使用引用传递，可以使用引用的包装器
    //std::ref = referencee
    //std::cref = const referencee
    using namespace std::placeholders;
    auto f = bind(func, 1, _3, _2, std::cref(number), number);
    number = 300;
    f(10, 20, 30, 40, 50, 60, 70);//没有使用的参数直接扔掉
}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

